package com.techsun.lf.shadow;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;

import com.techsun.lf.constant.Constant;
import com.tencent.shadow.dynamic.host.EnterCallback;

public class MainActivity extends AppCompatActivity {

    Button mBtnStartPluginApp;
    Button mBtnStartPluginUser;
    FrameLayout mContainer;

    private Handler mHandler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mContainer = findViewById(R.id.container);
        mBtnStartPluginApp = findViewById(R.id.btn_start_plugin_app);
        mBtnStartPluginUser = findViewById(R.id.btn_start_plugin_user);

        mBtnStartPluginApp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startPluginApp();
            }
        });

        mBtnStartPluginUser.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startPluginUser();
            }
        });

        Log.d("aaaaaa", "onCreate: " + mContainer.hashCode());
    }

    private void startPluginApp() {
        PluginHelper.getInstance().singlePool.execute(()-> {
            MyApplication.getApp().loadPluginManager(PluginHelper.getInstance().pluginManagerFile);

            /**
             * @param context context
             * @param formId  标识本次请求的来源位置，用于区分入口
             * @param bundle  参数列表, 建议在参数列表加入自己的验证
             * @param callback 用于从PluginManager实现中返回View
             */
            Bundle bundle = new Bundle();//插件 zip，这几个参数也都可以不传，直接在 PluginManager 中硬编码
//            bundle.putString(
//                    Constant.KEY_PLUGIN_ZIP_PATH,
//                    PluginHelper.getInstance().pluginZipFile.getAbsolutePath()
//            );
            bundle.putString(
                    Constant.KEY_PLUGIN_ZIP_PATH,
                    PluginHelper.getInstance().pluginAppZipFile.getAbsolutePath()
            );
            bundle.putString(
                    Constant.KEY_PLUGIN_NAME,
                    Constant.PLUGIN_APP_NAME
            ); // partKey 每个插件都有自己的 partKey 用来区分多个插件，如何配置在下面讲到
            bundle.putString(
                    Constant.KEY_ACTIVITY_CLASSNAME,
                    "com.techsun.lf.shadow.AppMainActivity"
            ); //要启动的插件的Activity页面
            bundle.putBundle(Constant.KEY_EXTRAS, new Bundle()) ;// 要传入到插件里的参数
            MyApplication.getApp().getPluginManager().enter(
                    this,
                    Constant.FROM_ID_START_ACTIVITY,
                    bundle,
                    new EnterCallback() {
                        @Override
                        public void onShowLoadingView(View view) {
                        }

                        @Override
                        public void onCloseLoadingView() {

                        }

                        @Override
                        public void onEnterComplete() {

                        }
                    });
        });
    }

    private void startPluginUser() {
        PluginHelper.getInstance().singlePool.execute(()-> {
            MyApplication.getApp().loadPluginManager(PluginHelper.getInstance().pluginManagerFile);

            /**
             * @param context context
             * @param formId  标识本次请求的来源位置，用于区分入口
             * @param bundle  参数列表, 建议在参数列表加入自己的验证
             * @param callback 用于从PluginManager实现中返回View
             */
            Bundle bundle = new Bundle();//插件 zip，这几个参数也都可以不传，直接在 PluginManager 中硬编码
//            bundle.putString(
//                    Constant.KEY_PLUGIN_ZIP_PATH,
//                    PluginHelper.getInstance().pluginZipFile.getAbsolutePath()
//            );
            bundle.putString(
                    Constant.KEY_PLUGIN_ZIP_PATH,
                    PluginHelper.getInstance().pluginUserZipFile.getAbsolutePath()
            );
            bundle.putString(
                    Constant.KEY_PLUGIN_NAME,
                    Constant.PLUGIN_USER_NAME
            ); // partKey 每个插件都有自己的 partKey 用来区分多个插件，如何配置在下面讲到
            bundle.putString(
                    Constant.KEY_ACTIVITY_CLASSNAME,
                    "com.techsun.lf.user.UserMainActivity"//插件中的Activity全路径
            ); //要启动的插件的Activity页面
            bundle.putBundle(Constant.KEY_EXTRAS, new Bundle()) ;// 要传入到插件里的参数
            MyApplication.getApp().getPluginManager().enter(
                    this,
                    Constant.FROM_ID_START_ACTIVITY,
                    bundle,
                    new EnterCallback() {
                        @Override
                        public void onShowLoadingView(View view) {
                        }

                        @Override
                        public void onCloseLoadingView() {

                        }

                        @Override
                        public void onEnterComplete() {

                        }
                    });
        });
    }
}